iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
0

因為沒題目了,所以我google了有趣程式
就發現一個有趣的題目: 找出1至100中,3的倍數印出Good night;5的倍數印出Happy;兩者都有則印出HI
並且題目只限制用紙筆寫出程式,不能用電腦,結果則發現只有1%的人可以寫出正確答案

題目很簡單,但魔鬼都藏在細節中
大家都習慣直接用電腦撰寫程式,發現問題後,再把BUG修正
在長期依賴電腦的情況下,就會因為過份依賴,而忽略基本的概念
這一次大家可以先自己寫一次,再用電腦跑一次

正確答案如下

int main(){
for(int run=1;run<=100;run++){
	
if(run%15 == 0)
printf("HI\n");

else if(run%3 == 0)
printf("Good night\n");

else if(run%5 == 0)
printf("Happy\n");

else
printf("%d\n",run);
}  
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20180105/20107818JXDsTK0wOu.png

我猜測許多人錯誤是因為大家都按照題目給的指示而撰寫程式
所以會變成這樣

int main(){
for(int run=1;run<=100;run++){

if(run%3 == 0)
printf("Good night\n");

else if(run%5 == 0)
printf("Happy\n");

else if(run%15 == 0)
printf("HI\n");

else
printf("%d\n",run);
}  
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20180105/201078184K7ul9QvQs.png
我們可以看到輸出結果都沒有HI的輸出
而兩者都有(則15的倍數)只印出Good night
因為我們是利用ifelse if的語法
如果前面的if已滿足條件,後面的else ifelse 則不會有輸出

==================結論==================

因此我們在思考程式時,要優先考慮條件的順序
3的倍數印出Good night;5的倍數印出Happy;兩者都有則印出HI
因為最優先考慮的是是否乎合3與5的倍數這條件
其次則是,是否乎合5的倍數或是是否乎合3的倍數


上一篇
反相輸出 [1]遞迴
下一篇
輕談:聖誕節的樹[1]
系列文
提神?看程式比喝咖啡更有效。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言